//Stephen Kirksharian
//Robert Harkreader
//CPSC 321
//DUE 4/27/08



initial	begin
 // Test R-Types
 //
   //I type to initialize register
   Mem[0] = {6'd8,5'd0,5'd1,16'd8};
   //			addi	$1, $0, 8 	#$1 = 8 this is the sum
   Mem[1] = {6'd0,5'd1,5'd1,5'd2,5'd0,6'd32};
   //			add	$2, $1, $1	#$2 = 16 this is our array index
   Mem[2] = {6'd0,5'd1, 5'd2, 5'd3, 5'd0, 6'd34}; 
   //                   sub     $3, $1, $2      # 8 = 8-16;
   Mem[3] = {6'd0,5'd1,5'd3,5'd4,5'd0,6'd33};
   //                   addu    $4, $3, $1      # ?? huge
   Mem[4] = {6'd0,5'd3,5'd1,5'd5,5'd0,6'd35};
   //                   subu    $5, $3, $1      # ?? smaller huge 
   Mem[5] = {6'd0,5'd2,5'd1,5'd6,5'd0,6'd36};
   //                   and     $6, $2, $1      # 0
   Mem[6] = {6'd0,5'd2,5'd1,5'd7,5'd0,6'd37};
   //                   or     $7, $2, $1      # 24
   Mem[7] = {6'd0,5'd2,5'd1,5'd8,5'd2,6'd0};
   //                   sll     $8, $2, $1      #32
   Mem[8] = {6'd0,5'd8,5'd1,5'd9,5'd2,6'd2};
   //                   srl     $9, $8, $1      # 2
   Mem[9] = {6'd0,5'd1,5'd2,5'd10,5'd0,6'd42};
   //                   slt     $10, $1, $2      # 1
   Mem[10] = {6'd0,5'd1,5'd2,5'd11,5'd0,6'd43};
   //                   sltu     $11, $1, $2      # 1
//I Type
   Mem[11] = {6'd9,5'd0,5'd12,16'd8};
   //			addiu	$12, $0, 8 	#$12 = 8 this is the sum
   Mem[12] = {6'd12,5'd1,5'd13,16'd10};
   //			andi	$13, $1, 10 	#$13 = 8 this is the sum
   Mem[13] = {6'd13,5'd1,5'd14,16'd10};
   //			ori	$14, $1, 10 	#$14 = 10 this is the sum
   Mem[14] = {6'd14,5'd1,5'd15,16'd10};
   //			xori	$15, $1, 10 	#$15 = 2 this is the sum
   Mem[15] = {6'd10,5'd1,5'd16,16'd10};
   //			slti	$16, $1, 10 	#$16 = 1 this is the sum
   Mem[16] = {6'd15,5'd0,5'd17,16'd64};
   //			lui	$17, 100 	#$17 = 00640000 this is the sum
   Mem[17] = {32'd0};
   //			bne     $1, $2, L2  	#$15 = 2 this is the sum
   Mem[18] = {6'b100011,5'd0,5'd29,16'd36};
   //                   lw $29, 36($0)
   Mem[19] = {6'b100000,5'd0,5'd29,16'd39};
   //		lb $29, 39($0)
   Mem[20] = {6'b101000,5'd0,5'd29,16'd36};
   //                   sb $29, 36($0) 
   Mem[21] = {6'b100011,5'd0,5'd29,16'd36};
   //			lw $29, 36($0)
   Mem[22] = {32'd0};
   //                   Do this we get problems
   Mem[23] = {6'd8,5'd0,5'd20,16'd1};
   //		L3:	addi	$20, $0, 1 	#$1 = 8 this is the sum
   Mem[24] = {6'd0,5'd2,5'd20,5'd18,5'd4,6'd3};
   //			sra	$18, $2, $20 	#16/16=1 this is the sum
   Mem[25] = {6'd10, 5'd1, 5'd23, 16'd10};
   //			sltiu   $23, $1, 10	#
   Mem[26] = {6'd2, 26'h1C};//112
   //			j 	L4
   Mem[27] = {32'd0};
   // 			nothing
   Mem[28] = {6'd3, 26'h1e};
   //		L4:	jal	L5
   Mem[29] = {32'd0};
   //			nothing
   Mem[30] = {6'd0, 5'd31, 21'd8};
   //		L5:	jr 	$ra
   
end
/*
// 
// Test Program 1 - Sums the elements of array A[]
//
   Mem[0] = {6'd0,5'd0,5'd0,5'd5,5'd0,6'd32};
   //			add	$5, $0, $0	# this is the sum
   Mem[1] = {6'd0,5'd0,5'd0,5'd2,5'd0,6'd32};
   //			add	$2, $0, $0	# this is our array index
   Mem[2] = {6'd35,5'd0,5'd3,16'd4};
   //			lw	$3, 4($0)	# $3 = DMem[1] = num to add
   Mem[3] = {6'd0,5'd3,5'd3,5'd3,5'd0,6'd32};
   //			add	$3, $3, $3	# $3 = 2 * DMem[1]
   Mem[4] = {6'd0,5'd3,5'd3,5'd3,5'd0,6'd32};
   //			add	$3, $3, $3	# $3 = 4 * DMem[1]
   Mem[5] = {6'd35,5'd0,5'd7,16'd0};
   //			lw	$7, 0($0)	# $7 = DMem[0] = increment
   Mem[6] = {6'd4,5'd2,5'd3,16'd4};
   //		label:	beq	$2, $3, done	# our loop
   Mem[7] = {6'd35,5'd2,5'd6,16'd8};
   //			lw	$6, 8($2)	# load Array[$2]
   Mem[8] = {6'd0,5'd5,5'd6,5'd5,5'd0,6'd32};
   //			add	$5, $5, $6	# add it into the sum
   Mem[9] = {6'd0,5'd2,5'd7,5'd2,5'd0,6'd32};
   //			add	$2, $2, $7	# next address
   Mem[10] = {6'd4,5'd0,5'd0,-16'd5};
//			beq	$0, $0, label	# jump to label
   Mem[11] = {6'd43,5'd2,5'd5,16'd8};
   //		done:	sw	$5, 8($2)	# store the sum in DMem[5]
   Mem[22] = {6'd0,5'd0,5'd0,16'd0};
   //			nop			# read DMem[5]
   //
   // Test Program 2
   //
   Mem[14] = {6'd8,5'd0,5'd1,16'd1};
   //			addi	$1, $0, 1	# $1 = 1
   Mem[15] = {6'd0,5'd0,5'd1,5'd2,5'd0,6'd34};
   //			sub	$2, $0, $1	# $2 = -1
   Mem[16] = {6'd0,5'd2,5'd0,5'd5,5'd0,6'd42};
   //			slt	$5, $2, $0	# $5 = 1
   Mem[17] = {6'd0,5'd1,5'd5,5'd6,5'd0,6'd32};     
   //			add	$6, $1, $5      # $6 = 2
   Mem[18] = {6'd0,5'd5,5'd6,5'd7,5'd0,6'd37};
   //			or	$7, $5, $6	# $7 = 3
   Mem[19] = {6'd0,5'd5,5'd7,5'd8,5'd0,6'd34};
   //			sub	$8, $5, $7	# $8 = -2
   Mem[20] = {6'd0,5'd8,5'd7,5'd9,5'd0,6'd36};
   //			and	$9, $8, $7	# $9 = 2
   Mem[21] = {6'd43,5'd0,5'd9,16'd32};
   //			sw	$9, 32($0)	# store $9 in DMem[8]
   Mem[22] = {6'd0,5'd0,5'd0,16'd0};
   //			nop			# read Dmem[8]
end*/
